using System;
using System.Collections.Generic;
using TestClassesForConcepts;
using TestClassesForConcepts.Sample3;

concept C1[T] 
{
    require T <: T;
    type A1 <: KA;
    require A1 >: KD1<T>;   
    type A2 >: A1;
}

concept C2[T, S, U, V] 
{
    type A1;
    type A2 >: SE1<A1, KeyS>;
    type A3 == A2;
    //require A3 <: SG1<A1>;
    require A1 <: A2;
}

concept C3[S, T, U]
{
    type A1 >: KD1<U>;
    require A1 <: KA;
    
    type B1 <: KB;
    require KF1<T, B1> <: KE1<KD1<U>>;
    require B1 >: A1;

    type B2 <: PA;
    //require B2 <: B1;
}

concept C4[S, T]
{
    type A1;
    type A2;
    type B1 <: SC1<A2>;
    require SF1<A1, A2> <: B1;
    type B2 >: SF1<A1, KeyP>;
    
    require B1 <: B2;
}

concept C5[S, T]
{
    type A1;
    type A2;
    type B1 <: SC1<A1>;
    type B2 <: SC1<KeyP>;
    require B1 == B2;
}
